#pragma once 

#include"ICamera.h"

class PALEGEM_API pgCamera : public ICamera
{
public:

	pgCamera(pgMat44 worldTransform, pgVec3 lookAt, float fNearPlane, 
		float fFarPlane, float fAspectRatio, float fFov);

	~pgCamera();

	void SetFov(float fFov);
	float GetFov();

	void SetWorldTransformMatrix(pgMat44 world);
	pgMat44 GetWorldTransformMatrix();

	pgMat44 GetViewMatrix();
	pgMat44 GetProjectionMatrix();

	void SetAspectRatio(float fAspectRatio);
	float GetAspectRatio();

	void SetFarPlane(float fFarPlane);
	float GetFarPlane();

	void SetNearPlane(float fNearPlane);
	float GetNearPlane();

	 void SetLookAt(pgVec3 at);
	 pgVec3 GetLookAt();

	 pgVec3 GetPosition();
	 pgVec3 GetUpVector();

private:

	pgMat44 m_worldTransform;
	pgMat44 m_viewMatrix;
	pgMat44 m_projectionMatrix;
	
	pgVec3 m_lookAt;
	pgVec3 m_up;
	pgVec3 m_pos;

	float m_fFov;
	float m_fAspectRatio;
	float m_fNearPlane;
	float m_fFarPlane;

	bool m_bCreateProjection;
	bool m_bCreateView;
};